﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Oracle.DataAccess.Client;
using Oracle.DataAccess;
using NLog;

namespace PhotoADSync
{
    class Datenbank
    {
        private static Logger myLogger = LogManager.GetCurrentClassLogger();

        public OracleConnectionStringBuilder oracleStringBuilder { get; set; }
        public OracleConnection OraVerbindung { get; set; }

        /// <summary>
        /// DB-String mit Zugangsdaten
        /// </summary>
        public Datenbank() 
        {
            try
            {
                string conn = Properties.Settings.Default.Datenbank;
                oracleStringBuilder = new OracleConnectionStringBuilder(conn);
            }
            catch (OracleException oracleEx) 
            {
                myLogger.FatalException("Oracle Fehler Datenbank()", oracleEx);
            }
        }

        
        /// <summary>
        ///  Aufbau der Datenbankverbindung
        /// </summary>
        /// <returns> Gibt zurück, ob die Datenbankverbindung erfolgreich ist -> True/False </returns>
        public bool Connect() 
        {
            try
            {
                OraVerbindung = new OracleConnection(oracleStringBuilder.ConnectionString);
                myLogger.Trace("Oracle Verbindung erfolgreich.");

                OraVerbindung.Open();
                myLogger.Debug("Oracle Verbindung geöffnet.");

                return true;
            }
            catch (OracleException oracleEx)
            {
                myLogger.FatalException("Oracle Fehler Datenbank()", oracleEx);
                return false;
            }
            catch (Exception ex) 
            {
                myLogger.FatalException("Fehler beim Verbindungaufbau.", ex);
                return false;
            }
        }


        
        
        /// <summary>
        ///  Schließen der Datenbankverbindung
        /// </summary>
        /// <returns> Gibt zurück, ob die Datenbankverbindung erfolgreich beendet wurde -> True/False </returns>
        public void Close() 
        {
            try
            {
                if (OraVerbindung.State == System.Data.ConnectionState.Open)
                {
                    OraVerbindung.Close();
                    myLogger.Info("Oracle Verbindung beendet.");
                }
                else
                {
                    myLogger.Warn("Beenden der Verbindung nicht möglich, da keine Verbindung vorhanden.");
                }

            }
            catch (Exception ex)
            {
                myLogger.FatalException("Fehler beim Schließen der Oracle Verbindung", ex);
            }
        }
    
    }
}
